/**
 * 业务配置对象
 */
export class CategoryProp {
    /**
     * 流程业务分类
     */
    category!: string;
    /**
     * 配置名称，如：请假申请
     */
    name!: string;
    /**
     * 最新流程Key
     */
    lastProcessKey!: string;
    /**
     * 最新流程版本号
     */
    lastProcessVersion!: string;
    /**
     * 流程描述
     */
    processDesc!: string;
    /**
     * 流程KEY： 对应的配置参数
     */
    master!: Map<string, CategoryMaster>;
    /**
     * 属性名称： 对应的查询配置参数
     */
    searchConfig!: Map<string, SearchConfig>;

    admin!: AdminConfig;
}

export class AdminConfig {
    pageTotalFieldName!: string;
    pageSizeFieldName!: string;
    pageNoFieldName!: string;
    pageSortFieldName!: string;
    recordsFieldName!: string;
    todoColumns!: AdminColumnConfig[];
    historyColumns!: AdminColumnConfig[];
    queryColumns!: AdminColumnConfig[];
}


export class AdminColumnConfig {
    label!: string;
    prop!: string;
    width!: string;
}

/**
 * 查询配置对象
 */
export class SearchConfig {
    /**
     * 参数名称
     */
    name!: string;
    /**
     * 参数描述
     */
    desc!: string;
    /**
     * 查询类型  对应 SillySearchType name 值
     */
    searchType!: string;
}

/**
 * 流程主分类对象
 */
export class CategoryMaster {
    /**
     * 流程Key
     */
    processKey!: string;
    /**
     * 流程版本号
     */
    processVersion!: string;
    /**
     * 流程描述
     */
    processDesc!: string;
    /**
     * 第一个节点KEY
     */
    firstNodeKey!: string;
    /**
     * 属性名称： 对应的配置参数
     */
    node!: Map<string, CategoryNode>;

}

/**
 * 流程节点对象
 */
export class CategoryNode {
    /**
     * 节点 ID
     */
    nodeKey!: string;
    /**
     * 节点名称
     */
    nodeName!: string;
    /**
     * 此节点是否为并行节点
     */
    isMultiple!: boolean;
    /**
     * 操作KEY： 对应的配置参数
     */
    option!: Map<string, NodeOption>;
    /**
     * 属性名称： 对应的配置参数
     */
    variable!: Map<string, CategoryVariable>;
    /**
     * 备注
     */
    remarks!: string;
}

/**
 * 节点操作对象
 */
export class NodeOption {
    /**
     * 操作Key值
     */
    key!: string;
    /**
     * 操作名称
     */
    name!: string;
    /**
     * 操作触发 url
     */
    url!: string;
    /**
     * 是否隐藏此操作
     */
    hide!: boolean;
    /**
     * 其他数据
     */
    data!: Map<string, object>;
}

/**
 * 变量配置数据
 */
export class CategoryVariable {
    /**
     * 属性名称
     */
    variableName!: string;
    /**
     * 属性配置类型
     */
    variableType!: string;
    /**
     * 属性描述
     */
    desc!: string;
    /**
     * 属性备注
     */
    remarks!: string;
    /**
     * 操作KEY： 对应的配置参数
     */
    params!: Map<string, object>;
}